package com.liming.aftersales.client;

import com.liming.common.pojo.dto.aftersales.CustomerReviewPageQuery;
import com.liming.common.pojo.dto.aftersales.ProductReviewPage;
import com.liming.common.pojo.dto.order.user.mini.MiniOrderEvaluateDTO;
import com.liming.common.pojo.vo.PageVO;
import com.liming.common.pojo.vo.aftersales.CustomerReviewVO;
import com.liming.common.pojo.vo.dashboard.CustomerReviewTopCardVO;
import com.liming.common.pojo.vo.review.MiniProductCommentVO;
import com.liming.common.pojo.vo.review.MiniProductReviewVO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.cloud.openfeign.SpringQueryMap;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 售后OpenFeign客户端
 *
 * @author liming
 * @date 2025/1/8
 */
@FeignClient(value = "after-sales-service", path = "/service/after_sales")
public interface AfterSalesClient {

    /**
     * 客户评论分页查询
     *
     * @param query 查询条件
     * @return 分页
     */
    @GetMapping("customer_review")
    PageVO<CustomerReviewVO> reviewPage(@SpringQueryMap CustomerReviewPageQuery query);

    /**
     * 客户评论顶部卡片
     *
     * @return 顶部卡片
     */
    @GetMapping("topCard")
    CustomerReviewTopCardVO topCard();

    /**
     * 客户评论删除
     *
     * @param id 评论id
     * @return 是否删除成功
     */
    @DeleteMapping("customer_review/{id}")
    Boolean reviewDelete(@PathVariable Long id);

    /**
     * 客户评论批量删除
     *
     * @param ids 评论id
     * @return 是否删除成功
     */
    @DeleteMapping("customer_review")
    Boolean reviewDelete(@RequestBody List<Long> ids);

    /**
     * 商家评论
     *
     * @param id      评论id
     * @param content 评论内容
     * @return 是否评论成功
     */
    @PutMapping("customer_review/{id}")
    Boolean merchantReview(@PathVariable Long id, @RequestParam String content);

    /**
     * 查询商品的评论 - 小程序
     *
     * @param id 商品id
     * @return 评论列表
     */
    @GetMapping("customer_review/mini/{id}")
    List<MiniProductCommentVO> miniProductReviews(@PathVariable Long id);

    /**
     * 商品评论分页查询 - 小程序
     *
     * @param page 分页条件
     * @return 评论分页
     */
    @GetMapping("customer_review/mini/page")
    MiniProductReviewVO miniPageProductReviews(@SpringQueryMap ProductReviewPage page);

    /**
     * 用户评论订单数量
     *
     * @return 数量
     */
    @GetMapping("user_review_order_count")
    Long userReviewOrderCount();

    /**
     * 该订单是否可以评论
     *
     * @param orderId 订单id
     * @return 是否可以评论
     */
    @GetMapping("can_review/{orderId}")
    Integer canComment(@PathVariable Long orderId);

    /**
     * 订单评价
     *
     * @param miniOrderEvaluateDTO 评价参数
     * @return 评价是否成功
     */
    @PostMapping("evaluate")
    Boolean evaluate(@RequestBody MiniOrderEvaluateDTO miniOrderEvaluateDTO);
}
